<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // var arr = new Array();
        // var obj = new Object()
        // var p = new Promise(function(resolve,reject){})

        // console.log(arr)
        // console.log(arr instanceof Array);

        // console.log(obj)
        // console.log(obj instanceof Object)

        // console.log(p)
        // console.log(p instanceof Promise)

        // new 关键字  
        // 1. 创建一个纯净的对象
        // 2. this 指向的是创建的对象 
        // 3. 返回新的创建对象   result = this

        // 构造函数中的this  永远指向的是被实例化创建的对象  new 出来的对象 

        // 构造函数  为了区分构造函数  一般来说构造函数首字母大写 
        function Func(){
            console.log(this)
            this.a = "100"
            this.b = "1000"
            this.todo = function(){

            }

            // __proto__ 指向构造函数的原型对象  prototype 
        }

        // 普通函数使用 
        // var res = window.Func();  // this=>window  res = 
        // console.log('res',res)    //  res =>  undefined   没有返回值的函数 就是 undefined

 
        // 调用构造函数 实例化 把创建的实例化对象赋值给result 
        var result = new Func()   // this == result;
        console.log("result",result)
        console.log(result instanceof Func);

    </script>
</body>
</html>